home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ppp / ppp-sunos4.1.patch6 < prev    next >
Text File  |  1991-10-03  |  28KB  |  1,000 lines

  1. *** Makefile    Sun May 20 09:40:08 1990
  2. --- ../ppp/Makefile    Fri Oct  4 10:58:21 1991
  3. ***************
  4. *** 2,31 ****
  5.   # The KPPP directory contains the system include files.
  6.   # It is normally /usr/include.
  7.   # -DSTREAMS for SUN OS
  8. ! KPPP=include
  9. ! OBJS= ppp.o magic.o fsm.o lcp.o ipcp.o upap.o logwtmp.o
  10. ! CFLAGS= -g -I${KPPP} -DDEBUGFSM -DDEBUGLCP -DDEBUGIPCP -DDEBUGUPAP -DSTREAMS -DBSD=43
  11.   SOURCE= README Readme.streams vax.diff Makefile ppp.c ppp.h fsm.c fsm.h \
  12.    lcp.c lcp.h ipcp.c ipcp.h upap.c upap.h magic.c magic.h if_ppp.c \
  13. !  if_ppp.h ppp_if.c ppp_str.h ppp_async.c slip_var.h slcompress.c slcompress.h slstats.c logwtmp.c 
  14.   
  15.   all: ppp slstats
  16.   
  17. ! ppp: ${OBJS}
  18. !     ${CC} -o ppp -g ${OBJS}
  19.   
  20.   slstats:    slstats.c
  21. !     $(CC) -o slstats -g -DPPP slstats.c
  22.   
  23. - ppp.shar: $(SOURCE)
  24. -     ./shar -b $(SOURCE) > ppp.shar
  25.   ppp.tar: $(SOURCE)
  26.       tar -cvf ppp.tar $(SOURCE)
  27.   
  28. ! ppp.o: magic.h ppp.h fsm.h lcp.h ipcp.h upap.h
  29. ! magic.o: magic.c magic.h
  30. ! fsm.o: ppp.h fsm.h
  31. ! lcp.o: ppp.h fsm.h lcp.h
  32. ! ipcp.o: ppp.h fsm.h ipcp.h
  33. ! upap.o: ppp.h upap.h
  34. --- 2,104 ----
  35.   # The KPPP directory contains the system include files.
  36.   # It is normally /usr/include.
  37.   # -DSTREAMS for SUN OS
  38. ! PPPSRCS= ppp.c magic.c fsm.c lcp.c ipcp.c upap.c logwtmp.c
  39. ! SLSTATSRCS= slstats.c
  40. ! PPPOBJS= ppp.o magic.o fsm.o lcp.o ipcp.o upap.o logwtmp.o
  41. ! CFLAGS= -g -DDEBUGFSM -DDEBUGLCP -DDEBUGIPCP -DDEBUGUPAP -DSTREAMS \
  42. !  -DBSD=43 -DPPP
  43.   SOURCE= README Readme.streams vax.diff Makefile ppp.c ppp.h fsm.c fsm.h \
  44.    lcp.c lcp.h ipcp.c ipcp.h upap.c upap.h magic.c magic.h if_ppp.c \
  45. !  if_ppp.h ppp_if.c ppp_str.h ppp_async.c slip_var.h slcompress.c slcompress.h slstats.c logwtmp.c ppp.8
  46.   
  47.   all: ppp slstats
  48.   
  49. ! ppp: $(PPPOBJS)
  50. !     $(CC) $(CFLAGS) -o ppp $(PPPOBJS)
  51.   
  52.   slstats:    slstats.c
  53. !     $(CC) $(CFLAGS) -o slstats slstats.c
  54.   
  55.   ppp.tar: $(SOURCE)
  56.       tar -cvf ppp.tar $(SOURCE)
  57.   
  58. ! ppp.tar.Z: ppp.tar
  59. !     compress ppp.tar
  60. ! clean:
  61. !     rm -f $(PPPOBJS) ppp slstats *~ #* core make
  62. ! depend:
  63. !     makedepend $(CFLAGS) $(PPPSRCS) $(SLSTATSRCS)
  64. ! # DO NOT DELETE THIS LINE -- make depend depends on it.
  65. ! ppp.o: /usr/include/stdio.h /usr/include/signal.h /usr/include/sys/signal.h
  66. ! ppp.o: /usr/include/vm/faultcode.h /usr/include/errno.h
  67. ! ppp.o: /usr/include/sys/errno.h /usr/include/fcntl.h
  68. ! ppp.o: /usr/include/sys/fcntlcom.h /usr/include/sys/stdtypes.h
  69. ! ppp.o: /usr/include/sys/stat.h /usr/include/sys/types.h
  70. ! ppp.o: /usr/include/sys/sysmacros.h /usr/include/pwd.h /usr/include/syslog.h
  71. ! ppp.o: /usr/include/netdb.h /usr/include/utmp.h /usr/include/sys/param.h
  72. ! ppp.o: /usr/include/machine/param.h /usr/include/sys/socket.h
  73. ! ppp.o: /usr/include/sys/time.h /usr/include/sys/time.h
  74. ! ppp.o: /usr/include/sys/callout.h /usr/include/net/if.h
  75. ! ppp.o: /usr/include/sys/stream.h /usr/include/sys/stropts.h
  76. ! ppp.o: /usr/include/sys/ioccom.h /usr/include/sys/termios.h
  77. ! ppp.o: /usr/include/sys/ttydev.h /usr/include/sys/ttycom.h
  78. ! ppp.o: /usr/include/sys/conf.h /usr/include/pixrect/pr_impl_util.h magic.h
  79. ! ppp.o: ppp.h ppp_str.h fsm.h lcp.h ipcp.h upap.h patchlevel.h
  80. ! magic.o: /usr/include/stdio.h /usr/include/sys/types.h
  81. ! magic.o: /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h
  82. ! magic.o: /usr/include/sys/time.h /usr/include/sys/time.h magic.h
  83. ! fsm.o: /usr/include/stdio.h /usr/include/sys/types.h
  84. ! fsm.o: /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h
  85. ! fsm.o: /usr/include/sys/stream.h /usr/include/sys/socket.h
  86. ! fsm.o: /usr/include/net/if.h ppp.h ppp_str.h /usr/include/sys/ioccom.h fsm.h
  87. ! lcp.o: /usr/include/stdio.h /usr/include/sys/ioctl.h
  88. ! lcp.o: /usr/include/sys/ttychars.h /usr/include/sys/ttydev.h
  89. ! lcp.o: /usr/include/sys/ttold.h /usr/include/sys/ioccom.h
  90. ! lcp.o: /usr/include/sys/ttycom.h /usr/include/sys/filio.h
  91. ! lcp.o: /usr/include/sys/sockio.h /usr/include/sys/types.h
  92. ! lcp.o: /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h
  93. ! lcp.o: /usr/include/sys/socket.h /usr/include/sys/time.h
  94. ! lcp.o: /usr/include/sys/time.h /usr/include/net/if.h
  95. ! lcp.o: /usr/include/netinet/in.h /usr/include/sys/stream.h ppp.h ppp_str.h
  96. ! lcp.o: fsm.h lcp.h
  97. ! ipcp.o: /usr/include/stdio.h /usr/include/sys/ioctl.h
  98. ! ipcp.o: /usr/include/sys/ttychars.h /usr/include/sys/ttydev.h
  99. ! ipcp.o: /usr/include/sys/ttold.h /usr/include/sys/ioccom.h
  100. ! ipcp.o: /usr/include/sys/ttycom.h /usr/include/sys/filio.h
  101. ! ipcp.o: /usr/include/sys/sockio.h /usr/include/sys/types.h
  102. ! ipcp.o: /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h
  103. ! ipcp.o: /usr/include/sys/socket.h /usr/include/sys/time.h
  104. ! ipcp.o: /usr/include/sys/time.h /usr/include/net/if.h
  105. ! ipcp.o: /usr/include/net/route.h /usr/include/netinet/in.h
  106. ! ipcp.o: /usr/include/sys/stream.h ppp.h ppp_str.h fsm.h ipcp.h
  107. ! upap.o: /usr/include/stdio.h /usr/include/sys/types.h
  108. ! upap.o: /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h
  109. ! upap.o: /usr/include/sys/time.h /usr/include/sys/time.h
  110. ! upap.o: /usr/include/sys/socket.h /usr/include/net/if.h
  111. ! upap.o: /usr/include/sys/stream.h ppp.h ppp_str.h /usr/include/sys/ioccom.h
  112. ! upap.o: upap.h
  113. ! logwtmp.o: /usr/include/sys/types.h /usr/include/sys/stdtypes.h
  114. ! logwtmp.o: /usr/include/sys/sysmacros.h /usr/include/sys/file.h
  115. ! logwtmp.o: /usr/include/sys/fcntlcom.h /usr/include/sys/stat.h
  116. ! logwtmp.o: /usr/include/sys/time.h /usr/include/sys/time.h
  117. ! logwtmp.o: /usr/include/utmp.h
  118. ! slstats.o: /usr/include/sys/param.h /usr/include/machine/param.h
  119. ! slstats.o: /usr/include/sys/signal.h /usr/include/vm/faultcode.h
  120. ! slstats.o: /usr/include/sys/mbuf.h /usr/include/sys/types.h
  121. ! slstats.o: /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h
  122. ! slstats.o: /usr/include/sys/vmmac.h /usr/include/sys/socket.h
  123. ! slstats.o: /usr/include/sys/file.h /usr/include/sys/fcntlcom.h
  124. ! slstats.o: /usr/include/sys/stat.h /usr/include/machine/pte.h
  125. ! slstats.o: /usr/include/ctype.h /usr/include/errno.h /usr/include/sys/errno.h
  126. ! slstats.o: /usr/include/nlist.h /usr/include/stdio.h /usr/include/signal.h
  127. ! slstats.o: /usr/include/net/if.h /usr/include/netinet/in.h
  128. ! slstats.o: /usr/include/netinet/in_systm.h /usr/include/netinet/ip.h
  129. ! slstats.o: /usr/include/netinet/ip_var.h slcompress.h
  130. ! slstats.o: /usr/include/sys/slip_var.h /usr/include/sys/stream.h
  131. ! slstats.o: /usr/include/sys/stropts.h /usr/include/sys/ioccom.h ppp_str.h
  132. *** ipcp.h    Fri Aug 16 10:30:10 1991
  133. --- ../ppp/ipcp.h    Mon Sep 30 23:51:34 1991
  134. ***************
  135. *** 23,32 ****
  136. --- 23,47 ----
  137.   #define CI_ADDRS    1    /* IP Addresses */
  138.   #define CI_COMPRESSTYPE    2    /* Compression Type */
  139.   
  140. + #define MAX_STATES 16        /* from slcompress.h */
  141. + #define IPCP_VJMODE_OLD 1        /* "old" mode (option # = 0x0037) */
  142. + #define IPCP_VJMODE_CURRENT 2        /* "current"mode (option # = 0x002d) */
  143. + #define IPCP_VJMODE_DRAFT 3        /* "draft" mode (option # = 0x002d, */
  144. +                                         /*  maxslot and slot number */
  145. +                         /*  compression from Aug. 1991 */
  146. +                     /*  ipcp draft RFC) */
  147. + #define IPCP_VJ_COMP 0x002d    /* current value for VJ compression option*/
  148. + #define IPCP_VJ_COMP_OLD 0x0037    /* "old" (i.e, broken) value for VJ */
  149. +                 /* compression option*/ 
  150.   typedef struct ipcp_options {
  151.       int neg_addrs : 1;        /* Negotiate IP Addresses? */
  152.       u_long ouraddr, hisaddr;    /* Addresses in NETWORK BYTE ORDER */
  153.       int neg_vj : 1;        /* Van Jacobson Compression? */
  154. +     u_char maxslotindex, cflag;    /* fields for Aug. 1991 Draft VJ */
  155. +                 /* compression negotiation */
  156.   } ipcp_options;
  157.   
  158.   extern fsm ipcp_fsm[];
  159. ***************
  160. *** 36,41 ****
  161. --- 51,57 ----
  162.   extern ipcp_options ipcp_hisoptions[];
  163.   
  164.   void ipcp_init();
  165. + void ipcp_vj_setmode();
  166.   void ipcp_activeopen();
  167.   void ipcp_passiveopen();
  168.   void ipcp_close();
  169. *** ipcp.c    Fri Aug 16 10:30:10 1991
  170. --- ../ppp/ipcp.c    Mon Sep 30 23:51:34 1991
  171. ***************
  172. *** 42,51 ****
  173.   #include "fsm.h"
  174.   #include "ipcp.h"
  175.   
  176. ! short ip_vj_comp = IP_VJ_COMP;    /* VJ compression protocol for negotiation. */
  177. !                 /* Change back to 0x0037 for rfc1171 */
  178. !                 /* compatibility */
  179.   
  180.   void ipcp_resetci();        /* Reset our Configuration Information */
  181.   int ipcp_cilen();        /* Return length of our CI */
  182.   void ipcp_addci();        /* Add our CIs */
  183. --- 42,60 ----
  184.   #include "fsm.h"
  185.   #include "ipcp.h"
  186.   
  187. ! /*
  188. !  * VJ compression protocol mode for negotiation. See ipcp.h for a 
  189. !  * description of each mode.
  190. !  */
  191. ! static int vj_mode = IPCP_VJMODE_CURRENT;
  192.   
  193. + static int vj_opt_len = 4;    /* holds length in octets for valid vj */
  194. +                 /* compression frame depending on mode */
  195. + static int vj_opt_val = IPCP_VJ_COMP;
  196. +                 /* compression negotiation frames */
  197. +                 /* depending on vj_mode */
  198.   void ipcp_resetci();        /* Reset our Configuration Information */
  199.   int ipcp_cilen();        /* Return length of our CI */
  200.   void ipcp_addci();        /* Add our CIs */
  201. ***************
  202. *** 102,116 ****
  203.       wo->neg_addrs = 1;
  204.       wo->ouraddr = 0;
  205.       wo->hisaddr = 0;
  206. !     wo->neg_vj = 1;        /* XXX We don't do it yet */
  207.   
  208. !     ao->neg_addrs = 1;
  209. !     ao->neg_vj = 1;        /* XXX We don't do it yet */
  210.   
  211.       fsm_init(&ipcp_fsm[unit]);
  212.   }
  213.   
  214.   
  215.   /*
  216.    * ipcp_activeopen - Actively open IPCP.
  217.    */
  218. --- 111,167 ----
  219.       wo->neg_addrs = 1;
  220.       wo->ouraddr = 0;
  221.       wo->hisaddr = 0;
  222. !     wo->neg_vj = 1;
  223. !     wo->maxslotindex = MAX_STATES - 1; /* really max index */
  224. !     wo->cflag = 1;
  225.   
  226. !     /* max slots and slot-id compression are currently hardwired in */
  227. !     /* ppp_if.c to 16 and 1, this needs to be changed (among other */
  228. !     /* things) gmc */
  229.   
  230. +     ao->neg_addrs = 1;
  231. +     ao->neg_vj = 1;
  232. +     ao->maxslotindex = MAX_STATES - 1;
  233. +     ao->cflag = 1;
  234.       fsm_init(&ipcp_fsm[unit]);
  235.   }
  236.   
  237. + /*
  238. +  * ipcp_vj_setmode - set option length and option value for vj
  239. +  * compression negotiation frames depending on mode
  240. +  */
  241.   
  242. + void
  243. +   ipcp_vj_setmode(mode)
  244. + int mode;    
  245. + {
  246. +   vj_mode = mode;
  247. +   switch (vj_mode) {
  248. +   case IPCP_VJMODE_OLD:
  249. +     vj_opt_len = 4;
  250. +     vj_opt_val = IPCP_VJ_COMP_OLD;
  251. +     break;
  252. +   case IPCP_VJMODE_CURRENT:
  253. +     vj_opt_len = 4;
  254. +     vj_opt_val = IPCP_VJ_COMP;
  255. +     break;
  256. +   case IPCP_VJMODE_DRAFT:     /* draft mode vj compression */          
  257. +     vj_opt_len = 6;          /* negotiation includes values for */    
  258. +                               /* maxslot and slot number compression */
  259. +     vj_opt_val = IPCP_VJ_COMP;
  260. +     break;
  261. +   default:
  262. +     fprintf(stderr, "Unknown vj compression mode %d.  Please report \
  263. + this error.\n", vj_mode);
  264. +     break;
  265. +   }
  266. + }
  267.   /*
  268.    * ipcp_activeopen - Actively open IPCP.
  269.    */
  270. ***************
  271. *** 203,209 ****
  272.   {
  273.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  274.   
  275. ! #define LENCISHORT(neg)  (neg ? 4 : 0)
  276.   #define LENCIADDRS(neg)  (neg ? 10 : 0)
  277.   
  278.       return (LENCIADDRS(go->neg_addrs) +
  279. --- 254,262 ----
  280.   {
  281.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  282.   
  283. ! #define LENCISHORT(neg)  (neg ? vj_opt_len : 0)
  284.   #define LENCIADDRS(neg)  (neg ? 10 : 0)
  285.   
  286.       return (LENCIADDRS(go->neg_addrs) +
  287. ***************
  288. *** 220,231 ****
  289.   {
  290.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  291.   
  292. ! #define ADDCISHORT(opt, neg, val) \
  293.       if (neg) { \
  294.       PUTCHAR(opt, ucp); \
  295. !     PUTCHAR(2 + sizeof (short), ucp); \
  296.       PUTSHORT(val, ucp); \
  297.       }
  298.   #define ADDCIADDRS(opt, neg, val1, val2) \
  299.       if (neg) { \
  300.       u_long l; \
  301. --- 273,290 ----
  302.   {
  303.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  304.   
  305. ! #define ADDCISHORT(opt, neg, val, maxslotindex, cflag) \
  306.       if (neg) { \
  307.       PUTCHAR(opt, ucp); \
  308. !     PUTCHAR(vj_opt_len, ucp); \
  309.       PUTSHORT(val, ucp); \
  310. +     if (vj_mode == IPCP_VJMODE_DRAFT) { \
  311. +        PUTCHAR(maxslotindex, ucp); \
  312. +        PUTCHAR(cflag, ucp); \
  313. +     } \
  314.       }
  315.   #define ADDCIADDRS(opt, neg, val1, val2) \
  316.       if (neg) { \
  317.       u_long l; \
  318. ***************
  319. *** 238,244 ****
  320.       }
  321.   
  322.       ADDCIADDRS(CI_ADDRS, go->neg_addrs, go->ouraddr, go->hisaddr)
  323. !     ADDCISHORT(CI_COMPRESSTYPE, go->neg_vj, ip_vj_comp)
  324.   }
  325.   
  326.   
  327. --- 297,305 ----
  328.       }
  329.   
  330.       ADDCIADDRS(CI_ADDRS, go->neg_addrs, go->ouraddr, go->hisaddr)
  331. !     ADDCISHORT(CI_COMPRESSTYPE, go->neg_vj, vj_opt_val, go->maxslotindex, go->cflag)
  332.   }
  333.   
  334.   
  335. ***************
  336. *** 257,281 ****
  337.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  338.       u_short cilen, citype, cishort;
  339.       u_long cilong;
  340.       /*
  341.        * CIs must be in exactly the same order that we sent...
  342.        * Check packet length and CI length at each step.
  343.        * If we find any deviations, then this packet is bad.
  344.        */
  345. ! #define ACKCISHORT(opt, neg, val) \
  346.       if (neg) { \
  347. !     if ((len -= 2 + sizeof (short)) < 0) \
  348.           goto bad; \
  349.       GETCHAR(citype, p); \
  350.       GETCHAR(cilen, p); \
  351. !     if (cilen != 2 + sizeof (short) || \
  352. !         citype != opt) \
  353.           goto bad; \
  354.       GETSHORT(cishort, p); \
  355.       if (cishort != val) \
  356.           goto bad; \
  357.       }
  358.   #define ACKCIADDRS(opt, neg, val1, val2) \
  359.       if (neg) { \
  360.       u_long l; \
  361. --- 318,351 ----
  362.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  363.       u_short cilen, citype, cishort;
  364.       u_long cilong;
  365. !     u_char cimaxslotindex, cicflag;
  366.       /*
  367.        * CIs must be in exactly the same order that we sent...
  368.        * Check packet length and CI length at each step.
  369.        * If we find any deviations, then this packet is bad.
  370.        */
  371. ! #define ACKCISHORT(opt, neg, val, maxslotindex, cflag) \
  372.       if (neg) { \
  373. !     if ((len -= vj_opt_len) < 0) \
  374.           goto bad; \
  375.       GETCHAR(citype, p); \
  376.       GETCHAR(cilen, p); \
  377. !     if (cilen != vj_opt_len || \
  378. !         citype != opt)  \
  379.           goto bad; \
  380.       GETSHORT(cishort, p); \
  381.       if (cishort != val) \
  382.           goto bad; \
  383. +     if (vj_mode == IPCP_VJMODE_DRAFT) { \
  384. +       GETCHAR(cimaxslotindex, p); \
  385. +       if (cimaxslotindex > maxslotindex) \
  386. +         goto bad; \
  387. +       GETCHAR(cicflag, p); \
  388. +       if (cicflag != cflag) \
  389. +         goto bad; \
  390. +     } \
  391.       }
  392.   #define ACKCIADDRS(opt, neg, val1, val2) \
  393.       if (neg) { \
  394.       u_long l; \
  395. ***************
  396. *** 305,312 ****
  397.       }
  398.   
  399.       ACKCIADDRS(CI_ADDRS, go->neg_addrs, go->ouraddr, go->hisaddr)
  400. !     ACKCISHORT(CI_COMPRESSTYPE, go->neg_vj, ip_vj_comp)
  401.       /*
  402.        * If there are any remaining CIs, then this packet is bad.
  403.        */
  404. --- 375,381 ----
  405.       }
  406.   
  407.       ACKCIADDRS(CI_ADDRS, go->neg_addrs, go->ouraddr, go->hisaddr)
  408. !     ACKCISHORT(CI_COMPRESSTYPE, go->neg_vj, vj_opt_val, go->maxslotindex, go->cflag)
  409.       /*
  410.        * If there are any remaining CIs, then this packet is bad.
  411.        */
  412. ***************
  413. *** 315,324 ****
  414.       return (1);
  415.   bad:
  416.       IPCPDEBUG((stderr, "ppp: ipcp_ackci: received bad Ack!\n"));
  417.       return (0);
  418.   }
  419.   
  420.   /*
  421.    * ipcp_nakci - NAK some of our CIs.
  422.    *
  423. --- 384,403 ----
  424.       return (1);
  425.   bad:
  426.       IPCPDEBUG((stderr, "ppp: ipcp_ackci: received bad Ack!\n"));
  427. +     if (vj_mode == IPCP_VJMODE_DRAFT )
  428. +       IPCPDEBUG((stderr, "ppp: ipcp_ackci: citype %d, cilen %l\n",
  429. +          citype, cilen));
  430. +     if (citype == CI_COMPRESSTYPE)  {
  431. +       IPCPDEBUG((stderr, "ppp: ipcp_ackci: compress_type %d", cishort));
  432. +       if (vj_mode == IPCP_VJMODE_DRAFT)
  433. +     IPCPDEBUG((stderr, ", maxslotindex %d, cflag %d\n", cishort, cimaxslotindex, cicflag));
  434. +       IPCPDEBUG((stderr, "\n"));
  435. +     }
  436.       return (0);
  437.   }
  438.   
  439.   /*
  440.    * ipcp_nakci - NAK some of our CIs.
  441.    *
  442. ***************
  443. *** 332,337 ****
  444. --- 411,417 ----
  445.       int len;
  446.   {
  447.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  448. +     u_char cimaxslotindex, cicflag;
  449.       u_short cishort;
  450.       u_long ciaddr1, ciaddr2;
  451.   
  452. ***************
  453. *** 342,355 ****
  454.        */
  455.   #define NAKCISHORT(opt, neg, code) \
  456.       if (neg && \
  457. !     len >= 2 + sizeof (short) && \
  458. !     p[1] == 2 + sizeof (short) && \
  459.       p[0] == opt) { \
  460. !     len -= 2 + sizeof (short); \
  461. !     INCPTR(2, p); \
  462. !     GETSHORT(cishort, p); \
  463. !     code \
  464.       }
  465.   #define NAKCIADDRS(opt, neg, code) \
  466.       if (neg && \
  467.       len >= 2 + 2 * sizeof (long) && \
  468. --- 422,440 ----
  469.        */
  470.   #define NAKCISHORT(opt, neg, code) \
  471.       if (neg && \
  472. !     len >= vj_opt_len && \
  473. !     p[1] == vj_opt_len && \
  474.       p[0] == opt) { \
  475. !       len -= vj_opt_len; \
  476. !       INCPTR(2, p); \
  477. !       GETSHORT(cishort, p); \
  478. !       if (vj_mode == IPCP_VJMODE_DRAFT) { \
  479. !          GETCHAR(cimaxslotindex, p); \
  480. !              GETCHAR(cicflag, p); \
  481. !           } \
  482. !           code \
  483.       }
  484.   #define NAKCIADDRS(opt, neg, code) \
  485.       if (neg && \
  486.       len >= 2 + 2 * sizeof (long) && \
  487. ***************
  488. *** 372,380 ****
  489.                  go->hisaddr = ciaddr2;
  490.              )
  491.       NAKCISHORT(CI_COMPRESSTYPE, go->neg_vj,
  492. !                   go->neg_vj = 0;
  493. !            )
  494.   
  495.       /*
  496.        * If there are any remaining CIs, then this packet is bad.
  497.        */
  498. --- 457,468 ----
  499.                  go->hisaddr = ciaddr2;
  500.              )
  501.       NAKCISHORT(CI_COMPRESSTYPE, go->neg_vj,
  502. !                   if (cishort != vj_opt_val)
  503. !               goto bad;
  504. !            go->maxslotindex = cimaxslotindex; /* this is what it */
  505. !            go->cflag = cicflag;          /* wants  */
  506.   
  507. +            )
  508.       /*
  509.        * If there are any remaining CIs, then this packet is bad.
  510.        */
  511. ***************
  512. *** 394,399 ****
  513. --- 482,488 ----
  514.       int len;
  515.   {
  516.       ipcp_options *go = &ipcp_gotoptions[f->unit];
  517. +     u_char cimaxslotindex, ciflag;
  518.       u_short cishort;
  519.       u_long cilong;
  520.   
  521. ***************
  522. *** 404,420 ****
  523.        */
  524.   #define REJCISHORT(opt, neg, val) \
  525.       if (neg && \
  526. !     len >= 2 + sizeof (short) && \
  527. !     p[1] == 2 + sizeof (short) && \
  528.       p[0] == opt) { \
  529. !     len -= 2 + sizeof (short); \
  530.       INCPTR(2, p); \
  531.       GETSHORT(cishort, p); \
  532. !     /* Check rejected value. */ \
  533.       if (cishort != val) \
  534.           goto bad; \
  535.       neg = 0; \
  536. !     }
  537.   #define REJCIADDRS(opt, neg, val1, val2) \
  538.       if (neg && \
  539.       len >= 2 + 2 * sizeof (long) && \
  540. --- 493,514 ----
  541.        */
  542.   #define REJCISHORT(opt, neg, val) \
  543.       if (neg && \
  544. !     len >= vj_opt_len && \
  545. !     p[1] == vj_opt_len && \
  546.       p[0] == opt) { \
  547. !     len -= vj_opt_len; \
  548.       INCPTR(2, p); \
  549.       GETSHORT(cishort, p); \
  550. !     /* Check rejected value. */  \
  551.       if (cishort != val) \
  552.           goto bad; \
  553. +     if (vj_mode == IPCP_VJMODE_DRAFT) { \
  554. +        GETCHAR(cimaxslotindex, p); \
  555. +        GETCHAR(ciflag, p); \
  556. +         } \
  557.       neg = 0; \
  558. !      }
  559.   #define REJCIADDRS(opt, neg, val1, val2) \
  560.       if (neg && \
  561.       len >= 2 + 2 * sizeof (long) && \
  562. ***************
  563. *** 437,443 ****
  564.       }
  565.   
  566.       REJCIADDRS(CI_ADDRS, go->neg_addrs, go->ouraddr, go->hisaddr)
  567. !     REJCISHORT(CI_COMPRESSTYPE, go->neg_vj, ip_vj_comp)
  568.   
  569.       /*
  570.        * If there are any remaining CIs, then this packet is bad.
  571. --- 531,537 ----
  572.       }
  573.   
  574.       REJCIADDRS(CI_ADDRS, go->neg_addrs, go->ouraddr, go->hisaddr)
  575. !     REJCISHORT(CI_COMPRESSTYPE, go->neg_vj, vj_opt_val)
  576.   
  577.       /*
  578.        * If there are any remaining CIs, then this packet is bad.
  579. ***************
  580. *** 472,477 ****
  581. --- 566,572 ----
  582.       u_char *p = inp;        /* Pointer to next char to parse */
  583.       u_char *ucp = inp;        /* Pointer to current output char */
  584.       int l = *len;        /* Length left */
  585. +     u_char maxslotindex, cflag;
  586.   
  587.       /*
  588.        * Reset all his options.
  589. ***************
  590. *** 478,484 ****
  591.        */
  592.       ho->neg_addrs = 0;
  593.       ho->neg_vj = 0;
  594.       /*
  595.        * Process all his options.
  596.        */
  597. --- 573,581 ----
  598.        */
  599.       ho->neg_addrs = 0;
  600.       ho->neg_vj = 0;
  601. !     ho->maxslotindex = 0;
  602. !     ho->cflag = 0;
  603. !     
  604.       /*
  605.        * Process all his options.
  606.        */
  607. ***************
  608. *** 551,574 ****
  609.         case CI_COMPRESSTYPE:
  610.           IPCPDEBUG((stderr, "ppp: ipcp_reqci: rcvd COMPRESSTYPE"));
  611.           if (!ao->neg_vj ||
  612. !         cilen != sizeof (short)) {
  613.           INCPTR(cilen, p);
  614.           orc = CONFREJ;
  615.           break;
  616.           }
  617.           GETSHORT(cishort, p);
  618. !         LCPDEBUG((stderr, "(%d)", cishort));
  619.           /*
  620. !          * Compresstype must be ip_vj_comp.
  621.            */
  622. !         if (cishort != ip_vj_comp) {
  623.           DECPTR(sizeof (short), p);
  624.           orc = CONFNAK;
  625. !         PUTSHORT(ip_vj_comp, p);
  626.           break;
  627.           }
  628.           ho->neg_vj = 1;
  629.           break;
  630.   
  631.         default:
  632. --- 648,689 ----
  633.         case CI_COMPRESSTYPE:
  634.           IPCPDEBUG((stderr, "ppp: ipcp_reqci: rcvd COMPRESSTYPE"));
  635.           if (!ao->neg_vj ||
  636. !         cilen != (vj_opt_len  - 2)) {
  637.           INCPTR(cilen, p);
  638.           orc = CONFREJ;
  639.           break;
  640.           }
  641.           GETSHORT(cishort, p);
  642. !         IPCPDEBUG((stderr, "(%d)", cishort));
  643.           /*
  644. !          * Compresstype must be vj_opt_val.
  645.            */
  646. !         if (cishort != vj_opt_val) {
  647.           DECPTR(sizeof (short), p);
  648.           orc = CONFNAK;
  649. !         PUTSHORT(vj_opt_val, p);
  650.           break;
  651.           }
  652.           ho->neg_vj = 1;
  653. +         if (vj_mode == IPCP_VJMODE_DRAFT) {
  654. +           GETCHAR(maxslotindex, p);
  655. +           if (maxslotindex > wo->maxslotindex) { 
  656. +         DECPTR(1, p);
  657. +         orc = CONFNAK;
  658. +         PUTCHAR(wo->maxslotindex, p);
  659. +         break;
  660. +           }
  661. +           ho->maxslotindex = maxslotindex;
  662. +           GETCHAR(cflag, p);
  663. +           if (cflag != wo->cflag) {
  664. +         DECPTR(1, p);
  665. +         orc = CONFNAK;
  666. +         PUTCHAR(wo->cflag, p);
  667. +         break;
  668. +           }
  669. +           ho->cflag = wo->cflag;
  670. +         }
  671.           break;
  672.   
  673.         default:
  674. *** lcp.h    Sat Dec 16 17:06:21 1989
  675. --- ../ppp/lcp.h    Thu Oct  3 15:32:43 1991
  676. ***************
  677. *** 59,65 ****
  678.   extern lcp_options lcp_allowoptions[];
  679.   extern lcp_options lcp_hisoptions[];
  680.   
  681. ! #define DEFMRU    256        /* Try for this */
  682.   #define MINMRU    128        /* No MRUs below this */
  683.   
  684.   void lcp_init();
  685. --- 59,65 ----
  686.   extern lcp_options lcp_allowoptions[];
  687.   extern lcp_options lcp_hisoptions[];
  688.   
  689. ! #define DEFMRU    1500        /* Try for this */
  690.   #define MINMRU    128        /* No MRUs below this */
  691.   
  692.   void lcp_init();
  693. *** patchlevel.h    Fri Aug 16 10:30:08 1991
  694. --- ../ppp/patchlevel.h    Fri Oct  4 09:34:38 1991
  695. ***************
  696. *** 1 ****
  697. ! # define    PATCHLEVEL    5
  698. --- 1 ----
  699. ! # define    PATCHLEVEL    6
  700. *** ppp.c    Fri Aug 16 10:30:12 1991
  701. --- ../ppp/ppp.c    Thu Oct  3 22:20:37 1991
  702. ***************
  703. *** 122,130 ****
  704.   
  705.   
  706.   void hup(), intr(), term(), alrm(), io(), incdebug(), nodebug();
  707. ! int setdebug(), setpassive(), noopt(), novj(), noupap(), requpap();
  708.   int setspeed(), noaccomp(), noasyncmap(), noipaddr(), nomagicnumber();
  709. ! int setasyncmap(), setold();
  710.   int setmru(), nomru(), nopcomp();
  711.   void getuserpasswd();
  712.   
  713. --- 122,130 ----
  714.   
  715.   
  716.   void hup(), intr(), term(), alrm(), io(), incdebug(), nodebug();
  717. ! int setdebug(), setpassive(), noopt(), setnovj(), noupap(), requpap();
  718.   int setspeed(), noaccomp(), noasyncmap(), noipaddr(), nomagicnumber();
  719. ! int setasyncmap(), setvjmode();
  720.   int setmru(), nomru(), nopcomp();
  721.   void getuserpasswd();
  722.   
  723. ***************
  724. *** 158,165 ****
  725.       "passive", setpassive,        /* Set passive mode */
  726.       "+ua", requpap,            /* Require UPAP authentication */
  727.       "-ua", noupap,            /* Don't allow UPAP authentication */
  728. !     "-vj", novj,            /* Disable VJ compression */
  729. !     "old", setold,            /* Backward compatibility mode */
  730.   #if 0
  731.       "local", setlocalipaddr,
  732.       "remote", setremoteipaddr,
  733. --- 158,165 ----
  734.       "passive", setpassive,        /* Set passive mode */
  735.       "+ua", requpap,            /* Require UPAP authentication */
  736.       "-ua", noupap,            /* Don't allow UPAP authentication */
  737. !     "vjmode", setvjmode,        /* set VJ compression mode */
  738. !     "-vj", setnovj,            /* disbale VJ compression */
  739.   #if 0
  740.       "local", setlocalipaddr,
  741.       "remote", setremoteipaddr,
  742. ***************
  743. *** 202,209 ****
  744.       passive        Set passive mode\n\
  745.       +ua        Require UPAP authentication\n\
  746.       -ua        Don't allow UPAP authentication\n\
  747. !     -vj        Disable VJ compression\n\
  748. !     old        Backward compatibility mode for use with old PPP versions\n\
  749.       <device>    Communicate over the named device\n\
  750.       <speed>        Set the baud rate to <speed>\n\
  751.       <loc>:<rem>    Set the local and/or remote interface IP\n\
  752. --- 202,209 ----
  753.       passive        Set passive mode\n\
  754.       +ua        Require UPAP authentication\n\
  755.       -ua        Don't allow UPAP authentication\n\
  756. !     vjmode <m>      VJ compression mode {old, current (default), draft}\n\
  757. !         -vj             disable VJ compression\n\
  758.       <device>    Communicate over the named device\n\
  759.       <speed>        Set the baud rate to <speed>\n\
  760.       <loc>:<rem>    Set the local and/or remote interface IP\n\
  761. ***************
  762. *** 1152,1183 ****
  763.   
  764.   
  765.   /*
  766. !  * novj - Disable Van Jacobson style IP header compression.
  767.    */
  768. ! int novj(argcp, argvp)
  769. !     int *argcp;
  770. !     char ***argvp;
  771.   {
  772. !     ipcp_wantoptions[0].neg_vj = 0;
  773. !     ipcp_allowoptions[0].neg_vj = 0;
  774. !     --*argcp, ++*argvp;
  775. !     return (1);
  776. ! }
  777.   
  778.   
  779.   /*
  780. !  *    setold - Set backward compatibility mode
  781.    */
  782. ! int setold(argcp, argvp)
  783.   int *argcp;
  784.   char ***argvp;
  785. !     {
  786. !     extern short ip_vj_comp;
  787.   
  788. !     ip_vj_comp = 0x0037;
  789. !     --*argcp, ++*argvp;
  790. !     return (1);
  791. !     }
  792.   
  793.   /*
  794.    * Valid speeds.
  795. --- 1152,1204 ----
  796.   
  797.   
  798.   /*
  799. !  *    setvjmode - Set vj compression mode
  800.    */
  801. ! int setvjmode(argcp, argvp)
  802. ! int *argcp;
  803. ! char ***argvp;
  804.   {
  805. !   extern int ipcp_vj_mode;
  806. !   
  807. !   --*argcp, ++*argvp;
  808.   
  809. +   if (!strcmp(**argvp, "old")) {    /* "old" mode */
  810. +     ipcp_vj_setmode(IPCP_VJMODE_OLD);
  811. +   }
  812.   
  813. +   else if (!strcmp(**argvp, "current")) {    /* "current" mode (default)*/
  814. +     ipcp_vj_setmode(IPCP_VJMODE_CURRENT);
  815. +   }
  816. +   else if (!strcmp(**argvp, "draft")) {    /* "draft" mode */
  817. +     ipcp_vj_setmode(IPCP_VJMODE_DRAFT);
  818. +   }
  819. +   else {
  820. +     fprintf(stderr,
  821. +         "Unknown vj compression mode %s. Defaulting to current.\n", **argvp); 
  822. +     ipcp_vj_setmode(IPCP_VJMODE_CURRENT);
  823. +   }
  824. +   --*argcp, ++*argvp;
  825. +   return (1);
  826. + }
  827.   /*
  828. !  *    setnovj - diable vj compression
  829.    */
  830. ! int setnovj(argcp, argvp)
  831.   int *argcp;
  832.   char ***argvp;
  833. ! {
  834. !   extern int ipcp_vj_mode;
  835. !   
  836. !   --*argcp, ++*argvp;
  837. !   ipcp_wantoptions[0].neg_vj = 0;
  838. !   ipcp_allowoptions[0].neg_vj = 0;
  839.   
  840. !   return (1);
  841. ! }
  842.   
  843.   /*
  844.    * Valid speeds.
  845. *** slcompress.c    Sun Apr 22 15:32:04 1990
  846. --- ../ppp/slcompress.c    Mon Sep 30 23:51:27 1991
  847. ***************
  848. *** 41,47 ****
  849.   #endif
  850.   
  851.   #define BCMP(p1, p2, n) bcmp((char *)(p1), (char *)(p2), (int)(n))
  852. ! #define BCOPY(p1, p2, n) bcopy((char *)(p1), (char *)(p2), (int)(n))
  853.   #ifndef KERNEL
  854.   #define ovbcopy bcopy
  855.   #endif
  856. --- 41,47 ----
  857.   #endif
  858.   
  859.   #define BCMP(p1, p2, n) bcmp((char *)(p1), (char *)(p2), (int)(n))
  860. ! #define SL_BCOPY(p1, p2, n) bcopy((char *)(p1), (char *)(p2), (int)(n))
  861.   #ifndef KERNEL
  862.   #define ovbcopy bcopy
  863.   #endif
  864. ***************
  865. *** 327,333 ****
  866.        * state with this packet's header.
  867.        */
  868.       deltaA = ntohs(th->th_sum);
  869. !     BCOPY(ip, &cs->cs_ip, hlen);
  870.   
  871.       /*
  872.        * We want to use the original packet as our compressed packet.
  873. --- 327,333 ----
  874.        * state with this packet's header.
  875.        */
  876.       deltaA = ntohs(th->th_sum);
  877. !     SL_BCOPY(ip, &cs->cs_ip, hlen);
  878.   
  879.       /*
  880.        * We want to use the original packet as our compressed packet.
  881. ***************
  882. *** 355,361 ****
  883.       m->m_off += hlen;
  884.       *cp++ = deltaA >> 8;
  885.       *cp++ = deltaA;
  886. !     BCOPY(new_seq, cp, deltaS);
  887.       INCR(sls_compressed)
  888.       return (TYPE_COMPRESSED_TCP);
  889.   
  890. --- 355,361 ----
  891.       m->m_off += hlen;
  892.       *cp++ = deltaA >> 8;
  893.       *cp++ = deltaA;
  894. !     SL_BCOPY(new_seq, cp, deltaS);
  895.       INCR(sls_compressed)
  896.       return (TYPE_COMPRESSED_TCP);
  897.   
  898. ***************
  899. *** 365,371 ****
  900.        * to use on future compressed packets in the protocol field).
  901.        */
  902.   uncompressed:
  903. !     BCOPY(ip, &cs->cs_ip, hlen);
  904.       ip->ip_p = cs->cs_id;
  905.       comp->last_xmit = cs->cs_id;
  906.       return (TYPE_UNCOMPRESSED_TCP);
  907. --- 365,371 ----
  908.        * to use on future compressed packets in the protocol field).
  909.        */
  910.   uncompressed:
  911. !     SL_BCOPY(ip, &cs->cs_ip, hlen);
  912.       ip->ip_p = cs->cs_id;
  913.       comp->last_xmit = cs->cs_id;
  914.       return (TYPE_UNCOMPRESSED_TCP);
  915. ***************
  916. *** 397,403 ****
  917.           hlen = ip->ip_hl;
  918.           hlen += ((struct tcphdr *)&((int *)ip)[hlen])->th_off;
  919.           hlen <<= 2;
  920. !         BCOPY(ip, &cs->cs_ip, hlen);
  921.           cs->cs_ip.ip_sum = 0;
  922.           cs->cs_hlen = hlen;
  923.           INCR(sls_uncompressedin)
  924. --- 397,403 ----
  925.           hlen = ip->ip_hl;
  926.           hlen += ((struct tcphdr *)&((int *)ip)[hlen])->th_off;
  927.           hlen <<= 2;
  928. !         SL_BCOPY(ip, &cs->cs_ip, hlen);
  929.           cs->cs_ip.ip_sum = 0;
  930.           cs->cs_hlen = hlen;
  931.           INCR(sls_uncompressedin)
  932. ***************
  933. *** 496,502 ****
  934.       cp -= cs->cs_hlen;
  935.       len += cs->cs_hlen;
  936.       cs->cs_ip.ip_len = htons(len);
  937. !     BCOPY(&cs->cs_ip, cp, cs->cs_hlen);
  938.       *bufp = cp;
  939.   
  940.       /* recompute the ip header checksum */
  941. --- 496,502 ----
  942.       cp -= cs->cs_hlen;
  943.       len += cs->cs_hlen;
  944.       cs->cs_ip.ip_len = htons(len);
  945. !     SL_BCOPY(&cs->cs_ip, cp, cs->cs_hlen);
  946.       *bufp = cp;
  947.   
  948.       /* recompute the ip header checksum */
  949. *** slstats.c    Sat May 19 13:29:40 1990
  950. --- ../ppp/slstats.c    Fri Oct  4 09:43:54 1991
  951. ***************
  952. *** 37,43 ****
  953.   #include <errno.h>
  954.   #include <nlist.h>
  955.   #include <stdio.h>
  956. - #include <stdio.h>
  957.   #include <signal.h>
  958.   #include <net/if.h>
  959.   #include <netinet/in.h>
  960. --- 37,42 ----
  961.